From: Florian Müllner Date: Fri, 26 Jul 2019 01:13:59 +0000 (+0000) Subject: loginDialog: Use GObject bindings over onUpdate handler X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~839^2^2~67 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=3ee525833e90904e13c813b669f503aea42b51f3;p=gnome-shell.git loginDialog: Use GObject bindings over onUpdate handler Instead of iterating over all actors each frame and sync'ing their opacities, we can set up bindings once before the animation. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/654 --- diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js index 2c21c6322..531b227c1 100644 --- a/js/gdm/loginDialog.js +++ b/js/gdm/loginDialog.js @@ -906,25 +906,29 @@ var LoginDialog = GObject.registerClass({ this._showPrompt(); } + _bindOpacity() { + this._bindings = Main.layoutManager.uiGroup.get_children() + .filter(c => c != Main.layoutManager.screenShieldGroup) + .map(c => this.bind_property('opacity', c, 'opacity', 0)); + } + + _unbindOpacity() { + this._bindings.forEach(b => b.unbind()); + } + _loginScreenSessionActivated() { if (this.opacity == 255 && this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING) return; + this._bindOpacity(); Tweener.addTween(this, { opacity: 255, time: _FADE_ANIMATION_TIME / 1000, transition: 'easeOutQuad', - onUpdate: () => { - let children = Main.layoutManager.uiGroup.get_children(); - - for (let i = 0; i < children.length; i++) { - if (children[i] != Main.layoutManager.screenShieldGroup) - children[i].opacity = this.opacity; - } - }, onComplete: () => { if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.NOT_VERIFYING) this._authPrompt.reset(); + this._unbindOpacity(); } }); } @@ -938,20 +942,14 @@ var LoginDialog = GObject.registerClass({ } _startSession(serviceName) { + this._bindOpacity(); Tweener.addTween(this, { opacity: 0, time: _FADE_ANIMATION_TIME / 1000, transition: 'easeOutQuad', - onUpdate: () => { - let children = Main.layoutManager.uiGroup.get_children(); - - for (let i = 0; i < children.length; i++) { - if (children[i] != Main.layoutManager.screenShieldGroup) - children[i].opacity = this.opacity; - } - }, onComplete: () => { this._greeter.call_start_session_when_ready_sync(serviceName, true, null); + this._unbindOpacity(); } }); }